Git vorige versies inspecteren
Home

Git vorige versies inspecteren

Git vorige versies inspecteren

git checkout

Met git checkout kan je op drie manieren uitchecken:

  1. bestanden
  2. commits
  3. branches

Hier houden we ons enkel bezig met de eerste twee manieren van uitchecken.

Als je een commit uit checkt wordt de gehele werkmap gelijk aan deze commit. Daarmee kan je een oudere versie van je project bekijken zonder dat je de laatste versie wijzigt.

Als je een bestand uit checkt kan je een oudere versie van dat bestand bekijken en blijft de rest van de werkmap ongewijzigd.

Wat hier aan voorafgaat

De toestand van de myap werkmap en de repo is zoals ze is nadat je de voorbeelden in Git bestanden neerleggen hebt gemaakt.

We voegen een gedicht toe omdat we meer dan een bestand in onze werkmap nodig hebben. Sla het op onder de naam Vondel.txt.

Joost van den Vondel

Geuze-Vesper of Ziekentroost voor de Vierenentwintig

Had hij Holland dan gedragen,

Onder 't hart,

Tot zijn afgeleefde dagen,

Met veel smart,

Om 't meinedig zwaard te laven,

Met zijn bloed,

En te mesten kraai en raven

Op zijn goed ?

Voeg het gedicht toe aan de verzamelplaats met git add Vondel.txt. En leg het neer met de boodschap: git commit -m "Vondel eerste versie toegevoegd".

Je hebt dan de volgende commit geschiedenis:

Git - git log tot aan Eerste versie Vondel toegevoegd
Git - git log tot aan Eerste versie Vondel toegevoegd

In de praktijk

git checkout master

Daarmee keer je terug naar de master tak. Takken zien we later. Het enige wat je nu moet weten is dat je met deze instructie terugkeert naar de werkversie van je project.

git checkout <commit> <file>

Hiermee check je een vorige versie van een bestand uit. Het bestand dat in de werkmap staat wordt een exacte kopie van het bestand dat in de uitgecheckte commit staat en het wordt toegevoegd aan de verzamelplaats.

Neem aan dat je terug wilt naar de eerste versie om met deze verder te gaan. Dat wil zeggen dat je de eerste versie weer in je werkmap moet zien te krijgen. Als het slechts om één bestand gaat, kan je een bestand uit een vorige commit uit checken en die terug in de werkmap zetten en op de verzamelplaats. Hier zie je wat er gebeurd als een bestand uit checkt:

Git - een bestand uitchecken
Git - een bestand uitchecken
git checkout <commit>

Alle bestanden in de werkmap worden geüpdated in overeenkomst met de opgegeven commit. Je kan een commit hash gebruiken of een tag als argument van de commit. Dat plaatst je in een detached HEAD toestand.

Uitchecken is een is read-only operatie. Je kan je repo niet beschadigen als je een oudere versie bekijkt. De werkversie in je werkmap blijft ongwijzigd staan in de master branch (zie Branches). Tijdens de dagdagelijkse ontwikkeling wijst de HEAD naar master of naar een andere lokale tak, maar als je een vorige commit uit checkt, wijst HEAD niet langer naar een tak, maar naar een commit. Dit heet een "detached HEAD" toestand en kan als volgt gevisualiseerd worden:

Git - commit detached HEAD
Git - commit detached HEAD

Let erop dat wanneer je één enkel bestand uitcheckt, de werkmap wel degelijk veranderd is. Bij het uitchecken van een commit wordt de head bij manier spreken losgemaakt van de Master en verschoven naar de uitgecheckte commit.

Verbeeld je het volgende scenario in. Ik wil mijn werkmap terugzetten naar de toestand waarin die was op het moment van voor de commit Vera versie twee.

C:\myap>git log --oneline
9af1508 Vera eerste versie hersteld
f2afd87 Vondel eerste versie toegevoegd
76367c9 Vera derde versie
ac43111 Vera tweede versie
b3a2046 Vera eerste versie

C:\myap>git checkout ac43111
Note: checking out 'ac43111'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at ac43111... Vera tweede versie

C:\myap>dir
 Volume in drive C is Windows
 Volume Serial Number is C6F4-3FE3

 Directory of C:\myap

26/01/2017  12:19    <DIR>          .
26/01/2017  12:19    <DIR>          ..
25/01/2017  14:39                14 .gitignore
26/01/2017  12:19               132 Vera.txt
               2 File(s)            146 bytes
               2 Dir(s)  99 809 517 568 bytes free

C:\myap>type Vera.txt
Jan Engelman
Vera Janacopoulos
Cantilene

Ambrosia, wat vloeit mij aan?
uw schedelveld is koeler maan
en alle appels blozen
C:\myap>git checkout master
Previous HEAD position was ac43111... Vera tweede versie
Switched to branch 'master'

C:\myap>dir
 Volume in drive C is Windows
 Volume Serial Number is C6F4-3FE3

 Directory of C:\myap

26/01/2017  12:19    <DIR>          .
26/01/2017  12:19    <DIR>          ..
25/01/2017  14:39                14 .gitignore
26/01/2017  12:19                83 Vera.txt
26/01/2017  12:19               265 Vondel.txt
               3 File(s)            362 bytes
               2 Dir(s)  99 809 517 568 bytes free

C:\myap>

Door de checkout komt je werkmap overeen precies overeen met de toestand van de ac43111 commit. Je kan de bestanden inspecteren, het project in de werkmap compileren, tests uitvoeren, en zelfs bestanden bewerken zonder je zorgen te maken over het verliezen van de huidige stand van zaken van het project. Niets wat je doet hier zal in je archief opgeslagen worden. Maar om verder te ontwikkelen, moet je terug naar de "huidige" staat van je project:

git checkout master

Dit veronderstelt wel dat je aan ontwikkelen bent in de standaard master tak. Takken zullen we nog uitgebreid bestuderen.

JI
2017-01-29 14:39:06